<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>



    // 1.  函数内也可以访问全局变量

    // 全局
    // var a = 10;   // 100

    // function fn() {
    //     a = 100;  // 全局
    //     console.log("函数内的a:", a);  // 100
    // }
    // console.log("函数外的a:", a);  // 10
    // fn();
    // console.log("函数外的a:", a);  // 100


    // 2.  局部变量和全局变量相互不影响

    // var a = 10; // 全局  
    // function fn() {
    //     var a = 100; // 局部 100
    //     console.log(a); // 100
    // }
    // fn();
    // console.log(a); // 10

    // 2.1   预编译
    // var a = 10;  // 全局
    // function fn() {
    //     // var a;  函数内的预编译
    //     a = 100;  // 局部 100
    //     console.log(a); // 100

    //     var a = 1332;
    // }
    // fn();
    // console.log(a);  // 10


    // 3. 形参也是局部变量 
    // var a = 10; // 全局 10
    // function fn(a) { //局部 10  100
    //     a = 100;
    //     console.log(a);  // 100
    // }
    // fn(10);
    // console.log(a);  // 10


    // F9 单步执行(一步一步走)
    // F10 单步执行(跳过函数调用,直接得到函数的执行结果 => 执行函数后续的代码)
    // F11 单步执行(进入到函数中, 函数内也可以一步一步执行)
    // debugger;

    // 4. 不通过关键词声明的变量 是全局变量
    // var a = b = 10;  //  b = 10;  var a = b;  

    // // 全局
    // // a = 10;
    // // b = 10;  // 20

    // function fn() {
    //     var a = b = 20;  // b = 20;  var a = b; 
    //     // 局部
    //     // a 10


    //     console.log("函数内：", a, b);  //20 20
    // }

    // fn();
    // console.log("函数外", a, b); // 10 20

    // 5.  嵌套调用(在函数内调用另一个函数)   => 函数调用只是启动函数, 和函数调用的位置无关,和函数本身定义时所在的位置有关

    /* debugger;

    var a = 10; // 全局
    function fn() {
        var a = 100; // 局部 100
        console.log("函数内：", a); // 100

        // c();

        function b() {
            var a = 1000;
            c();
        }
        b();
    }

    function c() {
        console.log("c里面的a", a);  // 10
    }

    fn();
 */


    //5.1 嵌套封装(在函数内封装另一个函数)
    debugger;
    var a = 10;  // 全局

    function fn() {
        var a = 100;  // 局部 100
        console.log("函数内：", a); // 100

        c();

        function c() {
            console.log("c里面的a", a);  // 100
        }
    }

    fn();

    console.log("函数外：", a);  //  10



</script>

</html>